Mechanistic simulations of population dynamics

We simulated antagonistic population dynamics using a discrete Lotka-Volterra competition model, where each population’s growth rate is influenced by the fluctuations in a competitor population. Pairs of populations were simulated according to:

\[\begin{equation} N_i(t+1) = N_i(t) + \lambda_i * N_i(t) \end{equation}\]

where \(N_i\) is the size of population \(i\), \(t\) is each time step, and \(\lambda\) is the true growth rate of population \(i\). The true growth rate (\(\lambda\)) is determined by:

\[\begin{equation} \lambda_i = r*(1-\frac{(N_i(t) + \alpha_{ji}N_j(t))}{K_i}) \end{equation}\]

where \(r\) is population \(i\)’s maximum growth rate, \(\alpha_{ji}\) is the interaction effect of population \(j\) on population \(i\), \(N_j\) is the size of population \(j\), and \(K_i\) is the carrying capacity of population \(i\).

To test index sensitivity to error, we introduced process and observation error into the generated population time series.

Table 1: Constant simulation parameters
Value
Number of population pairs 10.0
Time steps 10.0
Initial size (N0) 100.0
Maximum growth rate (r) 1.5

Biodiversity change scenarios

Direction of change

To test index sensitivity to direction of change, we generated three scenarios of population-level biodiversity change.

We varied carrying capacity through time to drive populations to:

    1. decline in response to decreasing carrying capacity, representing situations where habitats are lost or altered,
    1. remain stable in response to constant carrying capacity, where habitats are left untouched, or
    1. increase in response to increasing carrying capacity, where habitat quality and/or availability increases through time.

In each scenario, carrying capacity begins at \(K = 100\) and each population’s initial size is exactly at this carrying capacity (\(N_0 = 100\)).

Carrying capacity trends used to generate the biodiversity change scenarios.

Figure 1: Carrying capacity trends used to generate the biodiversity change scenarios.

Covariance

To test whether the LPI is sensitive to lags in the covariance between populations, we then generated two levels of lag in the interaction effect dictating how populations covary through time:

  • The first level was lag-1, where the interaction effect of populations \(i\) on populations \(j\) was dependent on the abundance of populations \(i\) at the previous time step (\(t-1\)).
  • The second level was lag-2, where this interaction effect depended instead on the abundance of populations \(i\) from two time steps ago (\(t-2\)).

Measuring index sensitivity

For each biodiversity change scenario, index sensitivity was measured as the accuracy and precision of the calculated Living Planet Index when compared to the true biodiversity change trend. This true LPI trend was obtained by calculating the index values through time based on a population generated from the same parameters we used to generate populations for each scenario, without any added process error.

We measured accuracy as the difference between the calculated LPI and true LPI trend at each time step:

\[accuracy = LPI_{calculated} - LPI_{true}\]

As a first metric of precision, we evaluated whether the true LPI trend fell within the 95% confidence interval around the calculated LPI trend obtained from bootstrap resampling at each time step. As a second precision metric, we measured precision as the difference between the expected uncertainty interval and the width of the 95% confidence interval. The expected uncertainty interval is determined based on the process and observation errors introduced into the simulated population trends. I calculated each population’s growth rate with and without introduced error, and took the difference between the two to get a measure of the total introduced uncertainty in the growth rates. Then, I converted this uncertainty to the same scale as the LPI:

\[ precision = LPI_{CIwidth} - LPI_{uncertainty} \]


Is the LPI sensitive to direction of change?

Table 2: Simulation parameters
i j
Interaction effect (alpha) 0 0
Observation error +/- 5 +/- 5
Process error +/- 0, 0.1, 0.2 +/- 0, 0.1, 0.2
Lag 0 0

Process error = 0

True and calculated LPI trends for each direction of biodiversity change.

Figure 2: True and calculated LPI trends for each direction of biodiversity change.

Process error = 0.1

True and calculated LPI trends for each direction of biodiversity change.

Figure 3: True and calculated LPI trends for each direction of biodiversity change.

Process error = 0.2

True and calculated LPI trends for each direction of biodiversity change.

Figure 4: True and calculated LPI trends for each direction of biodiversity change.

Summary

Process error = 0

LPI sensitivity to direction of change.

Figure 5: LPI sensitivity to direction of change.

Process error = 0.1

LPI sensitivity to direction of change.

Figure 6: LPI sensitivity to direction of change.

Process error = 0.2

LPI sensitivity to direction of change.

Figure 7: LPI sensitivity to direction of change.

direction mean_accuracy mean_precision
decline 0.20 -0.025
stable 0.00 -0.015
growth -0.04 -0.007

The LPI is sensitive to direction of change:
* declining trends are overestimated by the LPI 
* declining trends are estimated with lower precision

Is the LPI sensitive to covariance?

To test whether the LPI is sensitive to covariance between populations, we generated biodiversity change scenarios with two types of interaction effects (\(\alpha\)) between populations:

  • For the first scenario, we set a negative interaction effect to represent an antagonistic interaction between populations \(i\) and \(j\), such as a competitive or predator-prey relationship, which causes negative covariance.
  • The second scenario was based on a positive interaction effect of the same magnitude(s) to replicate a positive interaction between populations \(i\) and \(j\), and therefore positive covariance.

Each type of interaction was tested at two interaction strengths. All interaction effects were immediate, meaning there was no time lag in the covariance in the populations’ growth rates.

Table 3: Simulation parameters
i j
Interaction effect (alpha) 0 0
Observation error +/- 5 +/- 5
Process error +/- 0, 0.1, 0.2 +/- 0, 0.1, 0.2
Lag 0 0

Process error = 0

True and calculated LPI trends for each scenario.

Figure 8: True and calculated LPI trends for each scenario.

Process error = 0.1

True and calculated LPI trends for each scenario.

Figure 9: True and calculated LPI trends for each scenario.

Process error = 0.2

True and calculated LPI trends for each scenario.

Figure 10: True and calculated LPI trends for each scenario.

Summary

Process error = 0

LPI sensitivity to direction of change and covariance.

Figure 11: LPI sensitivity to direction of change and covariance.

Process error = 0.1

LPI sensitivity to direction of change and covariance.

Figure 12: LPI sensitivity to direction of change and covariance.

Process error = 0.2

LPI sensitivity to direction of change and covariance.

Figure 13: LPI sensitivity to direction of change and covariance.

Summary table

direction interaction mean_accuracy se_accuracy mean_precision se_precision
decline Strong Asynchrony 0.209 0.048 -0.062 0.010
decline Weak Asynchrony 0.216 0.060 -0.033 0.006
decline Weak Synchrony 0.153 0.038 -0.048 0.009
decline Strong Synchrony 0.134 0.025 -0.065 0.012
stable Strong Asynchrony -0.009 0.002 -0.054 0.012
stable Weak Asynchrony -0.001 0.001 -0.024 0.005
stable Weak Synchrony 0.039 0.006 -0.046 0.010
stable Strong Synchrony 0.105 0.015 -0.071 0.015
growth Strong Asynchrony -0.091 0.014 -0.058 0.013
growth Weak Asynchrony -0.055 0.008 -0.026 0.006
growth Weak Synchrony 0.058 0.012 -0.046 0.011
growth Strong Synchrony 0.181 0.030 -0.081 0.019
The LPI is sensitive to covariance when trends are declining:  

* The LPI is particularly sensitive to negative covariance in declining trends, which are very overestimated (alpha = 0.1 and 0.2)  
* growing and stable trends are slightly overestimated when there is high positive covariance  
* however, this sensitivity does not change at different levels of process error   

Is the LPI sensitive to lagged covariance?

We introduced two levels of lag in the interaction effect that influences how populations covary through time:

  • The first level was lag-1, where the interaction effect of populations \(i\) on populations \(j\) was dependent on the abundance of populations \(i\) at the previous time step (\(t-1\)).
  • The second level was lag-2, where this interaction effect depended instead on the abundance of populations \(i\) from two time steps ago (\(t-2\)).

Both of these lags were introduced into positively and negatively covarying populations shown above.

Table 4: Simulation parameters
i j
Interaction effect (alpha) 0 0
Observation error +/- 5 +/- 5
Process error +/- 0, 0.1, 0.2 +/- 0, 0.1, 0.2
Lag 0, 1, 2 0, 1, 2

Positive covariance

Process error = 0

Process error = 0.1

Process error = 0.2

Negative covariance

Process error = 0

Process error = 0.1

Process error = 0.2

Summary

Process error = 0

Process error = 0.1

Process error = 0.2

The LPI is not sensitive to lags of 1 or 2 time steps.

Summary table

direction interaction Lag Process_error mean_accuracy se_accuracy mean_precision se_precision
decline Strong Asynchrony 0 0 0.209 0.048 -0.062 0.010
decline Strong Asynchrony 0 0.1 0.212 0.048 -0.082 0.014
decline Strong Asynchrony 0 0.2 0.216 0.049 -0.108 0.019
decline Strong Asynchrony 1 0 -0.003 0.012 -0.058 0.010
decline Strong Asynchrony 1 0.1 -0.002 0.012 -0.078 0.013
decline Strong Asynchrony 1 0.2 -0.001 0.012 -0.101 0.017
decline Strong Asynchrony 2 0 0.017 0.012 -0.060 0.010
decline Strong Asynchrony 2 0.1 0.019 0.012 -0.083 0.014
decline Strong Asynchrony 2 0.2 0.022 0.012 -0.107 0.018
decline Weak Asynchrony 0 0 0.216 0.060 -0.033 0.006
decline Weak Asynchrony 0 0.1 0.218 0.061 -0.045 0.008
decline Weak Asynchrony 0 0.2 0.218 0.061 -0.075 0.013
decline Weak Asynchrony 1 0 0.040 0.021 -0.031 0.005
decline Weak Asynchrony 1 0.1 0.039 0.021 -0.043 0.007
decline Weak Asynchrony 1 0.2 0.034 0.020 -0.069 0.012
decline Weak Asynchrony 2 0 0.051 0.020 -0.032 0.005
decline Weak Asynchrony 2 0.1 0.053 0.020 -0.046 0.008
decline Weak Asynchrony 2 0.2 0.053 0.020 -0.074 0.013
decline Weak Synchrony 0 0 0.153 0.038 -0.048 0.009
decline Weak Synchrony 0 0.1 0.140 0.039 -0.050 0.009
decline Weak Synchrony 0 0.2 0.133 0.039 -0.068 0.012
decline Weak Synchrony 1 0 0.099 0.026 -0.055 0.010
decline Weak Synchrony 1 0.1 0.091 0.026 -0.087 0.016
decline Weak Synchrony 1 0.2 0.080 0.024 -0.130 0.023
decline Weak Synchrony 2 0 0.110 0.024 -0.046 0.009
decline Weak Synchrony 2 0.1 0.099 0.024 -0.049 0.009
decline Weak Synchrony 2 0.2 0.088 0.025 -0.062 0.011
decline Strong Synchrony 0 0 0.134 0.025 -0.065 0.012
decline Strong Synchrony 0 0.1 0.115 0.023 -0.080 0.014
decline Strong Synchrony 0 0.2 0.092 0.016 -0.139 0.024
decline Strong Synchrony 1 0 0.092 0.019 -0.120 0.022
decline Strong Synchrony 1 0.1 0.071 0.014 -0.157 0.026
decline Strong Synchrony 1 0.2 0.040 0.013 -0.292 0.050
decline Strong Synchrony 2 0 0.097 0.015 -0.104 0.018
decline Strong Synchrony 2 0.1 0.079 0.011 -0.130 0.021
decline Strong Synchrony 2 0.2 0.070 0.011 -0.157 0.025
stable Strong Asynchrony 0 0 -0.009 0.002 -0.054 0.012
stable Strong Asynchrony 0 0.1 0.002 0.001 -0.077 0.015
stable Strong Asynchrony 0 0.2 0.009 0.002 -0.103 0.020
stable Strong Asynchrony 1 0 -0.034 0.005 -0.054 0.012
stable Strong Asynchrony 1 0.1 -0.024 0.004 -0.078 0.015
stable Strong Asynchrony 1 0.2 -0.020 0.003 -0.103 0.020
stable Strong Asynchrony 2 0 -0.026 0.005 -0.060 0.013
stable Strong Asynchrony 2 0.1 -0.017 0.004 -0.084 0.016
stable Strong Asynchrony 2 0.2 -0.011 0.003 -0.110 0.022
stable Weak Asynchrony 0 0 -0.001 0.001 -0.024 0.005
stable Weak Asynchrony 0 0.1 0.002 0.001 -0.032 0.007
stable Weak Asynchrony 0 0.2 0.006 0.001 -0.050 0.010
stable Weak Asynchrony 1 0 -0.017 0.003 -0.025 0.005
stable Weak Asynchrony 1 0.1 -0.014 0.003 -0.036 0.007
stable Weak Asynchrony 1 0.2 -0.015 0.003 -0.052 0.010
stable Weak Asynchrony 2 0 -0.014 0.003 -0.026 0.006
stable Weak Asynchrony 2 0.1 -0.011 0.003 -0.036 0.007
stable Weak Asynchrony 2 0.2 -0.008 0.002 -0.053 0.011
stable Weak Synchrony 0 0 0.039 0.006 -0.046 0.010
stable Weak Synchrony 0 0.1 0.030 0.006 -0.048 0.010
stable Weak Synchrony 0 0.2 0.027 0.006 -0.058 0.012
stable Weak Synchrony 1 0 0.048 0.008 -0.049 0.010
stable Weak Synchrony 1 0.1 0.045 0.008 -0.065 0.013
stable Weak Synchrony 1 0.2 0.042 0.008 -0.095 0.019
stable Weak Synchrony 2 0 0.050 0.009 -0.046 0.010
stable Weak Synchrony 2 0.1 0.043 0.008 -0.048 0.010
stable Weak Synchrony 2 0.2 0.037 0.007 -0.055 0.011
stable Strong Synchrony 0 0 0.105 0.015 -0.071 0.015
stable Strong Synchrony 0 0.1 0.083 0.013 -0.071 0.015
stable Strong Synchrony 0 0.2 0.071 0.011 -0.091 0.018
stable Strong Synchrony 1 0 0.100 0.016 -0.091 0.020
stable Strong Synchrony 1 0.1 0.083 0.014 -0.140 0.028
stable Strong Synchrony 1 0.2 0.066 0.010 -0.187 0.035
stable Strong Synchrony 2 0 0.097 0.015 -0.080 0.018
stable Strong Synchrony 2 0.1 0.076 0.012 -0.097 0.020
stable Strong Synchrony 2 0.2 0.059 0.010 -0.121 0.023
growth Strong Asynchrony 0 0 -0.091 0.014 -0.058 0.013
growth Strong Asynchrony 0 0.1 -0.081 0.012 -0.077 0.017
growth Strong Asynchrony 0 0.2 -0.075 0.011 -0.100 0.022
growth Strong Asynchrony 1 0 -0.025 0.004 -0.060 0.013
growth Strong Asynchrony 1 0.1 -0.018 0.004 -0.079 0.017
growth Strong Asynchrony 1 0.2 -0.014 0.004 -0.102 0.022
growth Strong Asynchrony 2 0 -0.022 0.006 -0.071 0.015
growth Strong Asynchrony 2 0.1 -0.017 0.006 -0.089 0.019
growth Strong Asynchrony 2 0.2 -0.011 0.007 -0.113 0.025
growth Weak Asynchrony 0 0 -0.055 0.008 -0.026 0.006
growth Weak Asynchrony 0 0.1 -0.055 0.008 -0.032 0.007
growth Weak Asynchrony 0 0.2 -0.054 0.008 -0.042 0.009
growth Weak Asynchrony 1 0 -0.017 0.003 -0.026 0.006
growth Weak Asynchrony 1 0.1 -0.018 0.003 -0.034 0.007
growth Weak Asynchrony 1 0.2 -0.017 0.003 -0.046 0.010
growth Weak Asynchrony 2 0 -0.018 0.004 -0.028 0.007
growth Weak Asynchrony 2 0.1 -0.019 0.005 -0.036 0.008
growth Weak Asynchrony 2 0.2 -0.017 0.005 -0.047 0.010
growth Weak Synchrony 0 0 0.058 0.012 -0.046 0.011
growth Weak Synchrony 0 0.1 0.050 0.011 -0.049 0.011
growth Weak Synchrony 0 0.2 0.039 0.011 -0.050 0.011
growth Weak Synchrony 1 0 0.073 0.013 -0.043 0.010
growth Weak Synchrony 1 0.1 0.062 0.013 -0.044 0.010
growth Weak Synchrony 1 0.2 0.057 0.013 -0.062 0.014
growth Weak Synchrony 2 0 0.072 0.014 -0.044 0.010
growth Weak Synchrony 2 0.1 0.065 0.014 -0.045 0.011
growth Weak Synchrony 2 0.2 0.056 0.013 -0.048 0.011
growth Strong Synchrony 0 0 0.181 0.030 -0.081 0.019
growth Strong Synchrony 0 0.1 0.158 0.028 -0.083 0.019
growth Strong Synchrony 0 0.2 0.132 0.026 -0.075 0.017
growth Strong Synchrony 1 0 0.154 0.028 -0.053 0.015
growth Strong Synchrony 1 0.1 0.141 0.026 -0.100 0.023
growth Strong Synchrony 1 0.2 0.122 0.024 -0.157 0.035
growth Strong Synchrony 2 0 0.156 0.027 -0.065 0.018
growth Strong Synchrony 2 0.1 0.135 0.025 -0.076 0.019
growth Strong Synchrony 2 0.2 0.111 0.021 -0.096 0.023